package br.com.advocacia.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.advocacia.entidade.TipoPessoa;
import br.com.advocacia.logica.contract.DefaultLogicaContract;
import br.com.advocacia.util.FacesUtil;
import br.com.advocacia.util.StringUtil;

@ManagedBean(name="tipoPessoaFaces")
@ViewScoped
public class TipoPessoaFaces extends FacesUtil {
	
	private static final long serialVersionUID = -7977605925364598025L;

	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<TipoPessoa> logicaTipoPessoa;
	
	private TipoPessoa tipoPessoa = new TipoPessoa();
	private List<TipoPessoa> listaTipoPessoa = new ArrayList<>();
	private String tipoPessoaBusca;

	
	public void adicionar() {
		try {
			if (validaCampos()) {
				logicaTipoPessoa.adicionar(tipoPessoa);
				adicionarMensagem("Tipo de pessoa adicionado com sucesso");
				this.buscarTipoPessoa();
				fecharModal("dialogTipoPessoa");
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao adicionar o Tipo de pessoa");
		}
	}
	
	public void prepararAdicionar() {
		this.tipoPessoa = new TipoPessoa();
		abrirModal("dialogTipoPessoa");
	}
	
	public void selecionarRegistro(Long idArea, boolean editar) {
		try {
			this.tipoPessoa = logicaTipoPessoa.obterPorId(TipoPessoa.class,idArea);
			
			if (editar) {
				abrirModal("dialogTipoPessoa");
			} else {
				abrirModal("dialogExcluir");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void editar() {
		try {
			if (validaCampos()) {
				logicaTipoPessoa.editar(this.tipoPessoa);
				adicionarMensagem("Tipo de pessoa editado com sucesso");
				fecharModal("dialogTipoPessoa");
				this.buscarTipoPessoa();
			} else {
				return;
			}
			
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao editar o Tipo de pessoa");
		}
	}
	
	public void remover() {
		try {
			logicaTipoPessoa.remover(TipoPessoa.class, this.tipoPessoa.getId());
			adicionarMensagem("Tipo de pessoa removido com sucesso");
			fecharModal("dialogExcluir");
			this.buscarTipoPessoa();
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao remover o Tipo de pessoa");
		}
	}
	
	public void buscarTipoPessoa() {
		if (listaTipoPessoa != null) {
			this.listaTipoPessoa.clear();
		}
		
		try {
			if (!StringUtil.textoPreenchido(tipoPessoaBusca)) {
				this.listaTipoPessoa =  logicaTipoPessoa.buscarTodos(TipoPessoa.class, "tipoPessoa");
			} else {
				this.listaTipoPessoa = logicaTipoPessoa.buscarPorCampo(TipoPessoa.class, "tipoPessoa", tipoPessoaBusca);
			}
		} catch (Exception e) {
			adicionarMensagem("Houve um erro ao buscar as informações");
		}
	}
	
	public boolean validaCampos() {
		boolean valido = true;
		
		if (!StringUtil.textoPreenchido(this.tipoPessoa.getTipoPessoa())) {
			adicionarMensagem("O campo tipo é obrigatório");
			valido = false;
		}
		return valido;
	}
	
	public void setlogicaTipoPessoa(DefaultLogicaContract<TipoPessoa> logicaTipoPessoa) {
		this.logicaTipoPessoa = logicaTipoPessoa;
	}

	public List<TipoPessoa> getListaTipoPessoa() {
		return listaTipoPessoa;
	}

	public void setListaTipoPessoa(List<TipoPessoa> listaTipoPessoa) {
		this.listaTipoPessoa = listaTipoPessoa;
	}

	public String getTipoPessoaBusca() {
		return tipoPessoaBusca;
	}

	public void setTipoPessoaBusca(String TipoPessoaBusca) {
		this.tipoPessoaBusca = TipoPessoaBusca;
	}

	public TipoPessoa getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(TipoPessoa TipoPessoa) {
		this.tipoPessoa = TipoPessoa;
	}
	
	
}